import openai
import json



with open('config.json', 'r', encoding='utf-8') as config_file:
    config = json.load(config_file)

api_key = config['api_key']
url = config['url']
model = config['model']

# 你的 OpenAI API 密钥
openai.api_key = api_key  #  <-- 替换成你的 API 密钥
# 设置baseurl
openai.base_url = url
# 设置模型
openai.model = model

def get_response(prompt, conversation_history):
    """
    使用 OpenAI API 生成回复，并结合对话历史。

    Args:
        prompt (str): 用户输入的消息。
        conversation_history (list): 对话历史，一个包含消息字典的列表。

    Returns:
        str: OpenAI API 生成的回复，如果出现错误，返回 None。
    """
    try:
        # 构建完整的提示 (prompt)，包含对话历史和用户输入
        messages = conversation_history + [{"role": "user", "content": prompt}]

        # 
        # 调用 OpenAI API
        response = openai.chat.completions.create(
            model=model,  #  或 gpt-4，根据你的访问权限和需求选择
            messages=messages,
            #  可选参数，控制输出
            # temperature=0.7,  #  控制输出的随机性 (0.0 - 1.0)
            # max_tokens=150,   #  限制输出的 token 数量
        )

        # 从 API 响应中提取回复
        reply = response.choices[0].message.content
        return reply
    
    except Exception as e:
        print(f"发生其他错误: {e}")
        return None

def main():
    """
    主函数，处理用户输入和对话。
    """
    conversation_history = []  #  存储对话历史
    print("你好！我是 AI 助手。 请开始对话 (输入 'exit' 退出):")

    while True:
        user_input = input("你: ")
        if user_input.lower() == "exit":
            print("再见！")
            break

        # 获取 OpenAI 的回复
        ai_response = get_response(user_input, conversation_history)

        if ai_response:
            print("AI:", ai_response)

            # 将用户输入和 AI 回复添加到对话历史
            conversation_history.append({"role": "user", "content": user_input})
            conversation_history.append({"role": "assistant", "content": ai_response})

            #  可选：限制对话历史长度，避免 token 超限
            #  例如，只保留最近 5 轮对话
            if len(conversation_history) > 10:
                conversation_history = conversation_history[-10:]
        else:
            print("抱歉，我无法生成回复。")

if __name__ == "__main__":
    main()
